package org.example.servicepay.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.example.servicepay.entity.FeeItem;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 缴费项目 Mapper 接口
 */
@Mapper
public interface FeeItemMapper extends BaseMapper<FeeItem> {

    /**
     * 查询所有缴费项目
     * @return 缴费项目列表
     */
    List<FeeItem> selectAll();

    /**
     * 根据专业ID查询有效的缴费项目
     * @param majorId 专业ID
     * @param currentTime 当前时间
     * @return 缴费项目列表
     */
    List<FeeItem> selectByMajorId(@Param("majorId") Long majorId, @Param("currentTime") LocalDateTime currentTime);

    /**
     * 根据学院ID查询有效的缴费项目
     * @param facultyId 学院ID
     * @param currentTime 当前时间
     * @return 缴费项目列表
     */
    List<FeeItem> selectByFacultyId(@Param("facultyId") Long facultyId, @Param("currentTime") LocalDateTime currentTime);

    /**
     * 查询所有有效的缴费项目
     * @param currentTime 当前时间
     * @return 缴费项目列表
     */
    List<FeeItem> selectActiveItems(@Param("currentTime") LocalDateTime currentTime);

    /**
     * 根据发布人ID查询缴费项目
     * @param publisherId 发布人ID
     * @return 缴费项目列表
     */
    List<FeeItem> selectByPublisherId(@Param("publisherId") String publisherId);

    /**
     * 更新缴费项目状态
     * @param id 缴费项目ID
     * @param status 新状态
     * @return 更新行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") String status);

    /**
     * 批量查询缴费项目
     * @param ids 缴费项目ID列表
     * @return 缴费项目列表
     */
    List<FeeItem> selectByIds(@Param("ids") List<Long> ids);
}